ARM Cortex-M CPU

目录

Cortex-M 处理器核心架构

整体架构框图

ARM Cortex-M 处理器核心架构:
┌─────────────────────────────────────────────────────────────┐
│                    Cortex-M Processor Core                   │
├─────────────────┬─────────────────────────┬─────────────────┤
│  Register Bank       Pipeline Stages        Memory Interface │
│                                                           │
│ ┌─────────────┐  ┌─────┐ ┌─────┐ ┌─────┐  ┌─────────────┐ │
│     R0-R12      Fetch││Decode││Execute     AHB-Lite  │
│    General                             Bus IF    │
│   Purpose      └─────┘ └─────┘ └─────┘                 │
│ └─────────────┘                           └─────────────┘ │
│ ┌─────────────┐  ┌─────────────────────┐                  │
│     R13            NVIC               ┌─────────────┐ │
│    (SP)          Nested Vectored         MPU        │
│   MSP/PSP        Interrupt Ctrl       (Memory Prot  │
│ └─────────────┘  └─────────────────────┘    Unit)       │
│ ┌─────────────┐                           └─────────────┘ │
│     R14        ┌─────────────────────┐                  │
│     (LR)            SysTick Timer     ┌─────────────┐ │
│ └─────────────┘  └─────────────────────┘    Debug       │
│ ┌─────────────┐                             Interface   │
│     R15        ┌─────────────────────┐  └─────────────┘ │
│     (PC)            FPU                               │
│ └─────────────┘   (Cortex-M4/M7 etc.)                   │
│ ┌─────────────┐  └─────────────────────┘                  │
│    xPSR                                                 │
│ (APSR+IPSR+                                             │
│  EPSR)                                                  │
│ └─────────────┘ └─────────────────────────┘ └─────────────────┘
└─────────────────────────────────────────────────────────────┘

寄存器组详细结构

完整的寄存器体系

Cortex-M 完整寄存器集:
┌─────────────────────────────────────────────────────────────┐
│                     寄存器组 (Register Bank)                  │
├─────────────────────────┬───────────────────────────────────┤
│    通用寄存器           │        特殊功能寄存器               │
│   (16 × 32-bit)         │      (Special Registers)          │
├─────────────────────────┼───────────────────────────────────┤
│ R0  - 参数/结果/临时    │ xPSR - 程序状态寄存器              │
│ R1  - 参数/结果/临时    │   ├─ APSR (应用状态)              │
│ R2  - 参数/结果/临时    │   ├─ IPSR (中断状态)              │
│ R3  - 参数/结果/临时    │   └─ EPSR (执行状态)              │
│ R4  - 变量寄存器        │                                   │
│ R5  - 变量寄存器        │ PRIMASK   - 中断屏蔽              │
│ R6  - 变量寄存器        │ FAULTMASK - 故障屏蔽              │
│ R7  - 变量寄存器        │ BASEPRI   - 基本优先级            │
│ R8  - 变量寄存器        │ CONTROL   - 控制寄存器            │
│ R9  - 变量寄存器        │                                   │
│ R10 - 变量寄存器        │ MSP       - 主栈指针              │
│ R11 - 变量寄存器        │ PSP       - 进程栈指针            │
│ R12 - 临时寄存器        │                                   │
│ R13 - 栈指针 (SP)       │ NVIC寄存器 - 中断控制              │
│ R14 - 链接寄存器 (LR)   │ SCB寄存器 - 系统控制               │
│ R15 - 程序计数器 (PC)   │ MPU寄存器 - 内存保护               │
└─────────────────────────┴───────────────────────────────────┘

处理器流水线结构

三级流水线细节

Cortex-M 三级流水线详细结构:
┌─────────────────────────────────────────────────────────────┐
│                       3-Stage Pipeline                       │
├─────────────┬──────────────┬──────────────┬──────────────────┤
│  取指阶段   │   译码阶段   │   执行阶段   │     写回阶段     │
│  (Fetch)    │   (Decode)   │  (Execute)   │    (Write-back)  │
├─────────────┼──────────────┼──────────────┼──────────────────┤
│ ┌─────────┐ │ ┌──────────┐ │ ┌──────────┐ │                  │
│ │Instruction│ │ │Register │ │ │  ALU    │ │ 寄存器写入       │
│ │  Memory  │ │ │  Read   │ │ │(Arithmetic│ │ 内存写入        │
│ │          │ │ │         │ │ │ Logic Unit)│ │ 分支解析        │
│ └─────────┘ │ └──────────┘ │ └──────────┘ │                  │
│             │              │ ┌──────────┐ │                  │
│ PC → 地址   │ 指令解码     │ │ Address  │ │ 结果写回寄存器   │
│ 指令读取    │ 寄存器读取   │ │Calculation│ │ 或内存          │
│ 预取指缓冲  │ 产生控制信号 │ │  单元     │ │                  │
│             │              │ └──────────┘ │                  │
│ 更新PC      │              │ ┌──────────┐ │                  │
│             │              │ │ Memory   │ │                  │
│             │              │ │ Access   │ │                  │
│             │              │ └──────────┘ │                  │
└─────────────┴──────────────┴──────────────┴──────────────────┘

内存系统架构

总线矩阵和内存映射

Cortex-M 内存系统架构:
┌─────────────────────────────────────────────────────────────┐
│                    Cortex-M Memory System                    │
├─────────────────┬─────────────────────────┬─────────────────┤
│    Code Memory  │      SRAM/Data Memory    │   Peripherals   │
│   (Flash/ROM)   │        (Internal)        │    (AHB/APB)    │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │  Vector     │ │ │  Stack      │         │ │ GPIO        │ │
│ │  Table      │ │ │  Area       │         │ │ UART        │ │
│ │             │ │ │             │         │ │ SPI         │ │
│ └─────────────┘ │ └─────────────┘         │ │ I2C         │ │
│ ┌─────────────┐ │ ┌─────────────┐         │ │ Timer       │ │
│ │  Program    │ │ │  Heap       │         │ │ ADC/DAC     │ │
│ │  Code       │ │ │             │         │ └─────────────┘ │
│ │             │ │ └─────────────┘         │                 │
│ └─────────────┘ │ ┌─────────────┐         │ ┌─────────────┐ │
│                 │ │  .data      │         │ │ System      │ │
│                 │ │  Section    │         │ │ Peripherals │ │
│                 │ │             │         │ │ NVIC, SCB,  │ │
│                 │ │ ┌─────────┐ │         │ │ SysTick,    │ │
│                 │ │ │ .bss    │ │         │ │ MPU, etc.   │ │
│                 │ │ │ Section │ │         │ └─────────────┘ │
│                 │ │ └─────────┘ │         │                 │
└─────────────────┴─────────────────────────┴─────────────────┘
                             │
                    ┌────────┴────────┐
                    │   AHB-Lite      │
                    │   Bus Matrix    │
                    └─────────────────┘
                             │
                    ┌────────┴────────┐
                    │   Cortex-M      │
                    │   Processor     │
                    │     Core        │
                    └─────────────────┘

嵌套向量中断控制器 (NVIC)

NVIC 架构

NVIC (Nested Vectored Interrupt Controller) 架构:
┌─────────────────────────────────────────────────────────────┐
                         NVIC 结构                           
├─────────────────┬─────────────────────────┬─────────────────┤
  中断优先级管理       中断悬挂与控制          异常处理       
                                                           
 ┌─────────────┐  ┌─────────────┐          ┌─────────────┐ 
  优先级寄存器    悬挂寄存器             向量表偏移   
  PRIO0-PRIOx    PEND0-PENDx             寄存器      
    (8-bit                                           
   per IRQ)     └─────────────┘          └─────────────┘ 
 └─────────────┘  ┌─────────────┐          ┌─────────────┐ 
 ┌─────────────┐   使能寄存器             当前优先级   
  优先级分组     EN0-ENx                 寄存器      
   寄存器                                             
 └─────────────┘  └─────────────┘          └─────────────┘ 
                  ┌─────────────┐                          
                   活动寄存器                            
                   ACT0-ACTx                             
                                                         
                  └─────────────┘                          
└─────────────────┴─────────────────────────┴─────────────────┘

系统控制块 (SCB) 和 SysTick

系统控制架构

系统控制块 (SCB) 和 SysTick 定时器:
┌─────────────────────────────────────────────────────────────┐
│                   System Control Block                      │
├─────────────────┬─────────────────────────┬─────────────────┤
│   CPUID寄存器   │     异常控制寄存器        │   SysTick定时器  │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │ 处理器识别   │ │ │  SHPR2-3    │         │ │ 控制和状态  │ │
│ │  信息        │ │ │ (系统处理程 │         │ │   寄存器    │ │
│ │             │ │ │  序优先级)  │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   ICSR      │ │ │  CCR        │         │ │  重载值     │ │
│ │(中断控制状态)│ │ │(配置和控制) │         │ │  寄存器     │ │
│ │             │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │  VTOR       │ │ │  SHCSR      │         │ │  当前值     │ │
│ │(向量表偏移) │ │ │(系统处理程 │         │ │  寄存器     │ │
│ │             │ │ │ 序控制状态) │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
└─────────────────┴─────────────────────────┴─────────────────┘

内存保护单元 (MPU)

MPU 架构

MPU (Memory Protection Unit) 内存保护架构:
┌─────────────────────────────────────────────────────────────┐
                      MPU 结构                              
├─────────────────┬─────────────────────────┬─────────────────┤
   区域寄存器          属性控制               故障检测       
   (8-16 regions)                                          
                                                           
 ┌─────────────┐  ┌─────────────┐          ┌─────────────┐ 
   RBAR0-15       MPU_CTRL               MMAR        
  (区域基地址)     (控制)               (内存管理地址) 
                                         寄存器      
 └─────────────┘  └─────────────┘          └─────────────┘ 
 ┌─────────────┐  ┌─────────────┐          ┌─────────────┐ 
   RLAR0-15       MPU_RNR                BFAR        
  (区域属性)      (区域编号)            (总线故障地址) 
                                         寄存器      
 └─────────────┘  └─────────────┘          └─────────────┘ 
 ┌─────────────┐  ┌─────────────┐                          
  区域大小         MPU_RASR                            
   和属性         (区域属性)                            
                                                       
 └─────────────┘  └─────────────┘                          
└─────────────────┴─────────────────────────┴─────────────────┘

调试系统架构

调试接口和组件

Cortex-M 调试系统:
┌─────────────────────────────────────────────────────────────┐
│                      Debug System                           │
├─────────────────┬─────────────────────────┬─────────────────┤
│   调试接口       │      调试组件            │   跟踪单元       │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   SWD       │ │ │ 断点单元     │         │ │   ITM       │ │
│ │ (Serial Wire│ │ │ (FPB)       │         │ │(指令跟踪)    │ │
│ │   Debug)    │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   JTAG      │ │ │ 数据观察点  │         │ │   DWT       │ │
│ │ (可选)      │ │ │  (DWT)      │         │ │(数据跟踪)    │ │
│ │             │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│                 │ ┌─────────────┐         │ ┌─────────────┐ │
│                 │ │ ROM表       │         │ │   ETM       │ │
│                 │ │ (调试识别)  │         │ │(嵌入式跟踪)  │ │
│                 │ │             │         │ │             │ │
│                 │ └─────────────┘         │ └─────────────┘ │
└─────────────────┴─────────────────────────┴─────────────────┘

浮点单元 (FPU) - Cortex-M4/M7

FPU 架构

浮点单元 (FPU) - 可选组件:
┌─────────────────────────────────────────────────────────────┐
│                  Floating Point Unit (FPU)                  │
├─────────────────┬─────────────────────────┬─────────────────┤
│  浮点寄存器文件  │     浮点运算单元          │  浮点状态和控制   │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   S0-S31    │ │ │  浮点加法器  │         │ │  FPSCR      │ │
│ │ (32-bit     │ │ │             │         │ │(浮点状态控制)│ │
│ │ 单精度)      │ │ └─────────────┘         │ │  寄存器     │ │
│ └─────────────┘ │ ┌─────────────┐         │ └─────────────┘ │
│ ┌─────────────┐ │ │  浮点乘法器  │         │                 │
│ │  D0-D15     │ │ │             │         │                 │
│ │ (64-bit     │ │ └─────────────┘         │                 │
│ │ 双精度)      │ │ ┌─────────────┐         │                 │
│ └─────────────┘ │ │ 浮点除法/    │         │                 │
│                 │ │ 平方根单元   │         │                 │
│                 │ │             │         │                 │
│                 │ └─────────────┘         │                 │
└─────────────────┴─────────────────────────┴─────────────────┘